package tasks;

import java.util.Scanner;

/**
 * 题目0005-任务调度
 * https://wiki.amoscloud.com/zh/ProgramingPractice/NowCoder/Adecco/Topic0005-%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6
 */
public class Task05 {
    /**
     题目描述
     为了充分发挥GPU算力，
     需要尽可能多的将任务交给GPU执行，
     现在有一个任务数组，
     数组元素表示在这1s内新增的任务个数，
     且每秒都有新增任务，
     假设GPU最多一次执行n个任务，
     一次执行耗时1s，
     在保证GPU不空闲的情况下，最少需要多长时间执行完成。

     输入描述
     第一个参数为GPU最多执行的任务个数，取值范围1 ~ 10000
     第二个参数为任务数组的长度，取值范围1 ~ 10000
     第三个参数为任务数组，数字范围1 ~ 10000

     输出描述
     执行完所有任务需要多少秒

     示例一
     输入
     3
     5
     1 2 3 4 5
     输出
     6

     input
     4
     5
     9 4 1 1 1
     output
     5
     */
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // Gpu 最多执行的任务个数
        int n = Integer.parseInt(scanner.nextLine());
        // 任务组的个数
        int taskNums = Integer.parseInt(scanner.nextLine());
        String[] taskArray = scanner.nextLine().split("\\s+");
        int[] intArray = new int[taskNums];
        for (int i = 0; i < taskNums; i++) {
            // 把每个任务的长度存入数组中
            intArray[i] = Integer.valueOf(taskArray[i]);
        }
        solution(n, intArray);
    }
    private static void solution(int n, int[] jobCount) {
        int remainIng = 0;
        int time = 0;
        for (int taskCount : jobCount) {
            if (taskCount + remainIng > n) {
                remainIng = taskCount + remainIng - n;
            } else {
                remainIng = 0;
            }
            time++;
        }
        if (remainIng / n > 0) {
            time += remainIng / n;
        }
        if (remainIng % n > 0) {
            time++;
        }

        System.out.println(time);
    }
}
